[Coding031] 递归 - 最大公约数

欧几里得算法

Ben 2024/01/28

More coding records

Get the knowledge flowing and circulating! :)

目录

标题:欧几里得算法

概念

整数 正整数

两个整数的最大公约数是能够同时整除它们的最大的正整数。

在数学中,辗转相除法,又称欧几里得算法(英语:Euclidean algorithm),是求最大公约数的算法。辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题i和ii)中(大约公元前300年),所以它是现行的算法中历史最悠久的,而在中国则可以追溯至东汉出现的《九章算术》。

参考:辗转相除法 扩展欧几里得算法

原理

辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数。(定义中包含了递归的思想)

例如:欲求252和105的最大公约数。

{252=21×12105=21×521

求解

解释:在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至余数为零。这时,所剩下的还没有变成零的数就是两数的最大公约数。

重要推论

由辗转相除法也可以推出,两数的最大公约数可以用两数的整数倍相加来表示,如21=5×105+(2)×252。这个重要的结论叫做裴蜀定理。

 

代码

伪代码

递归版
非递归版

 

代码(C语言)

递归版
非递归版